//package com.openvas.commons.common.utils.file;
//
//import com.openvas.commons.common.constant.Constants;
//import com.openvas.commons.common.exception.file.FileNameLengthLimitExceededException;
//import com.openvas.commons.common.exception.file.FileSizeLimitExceededException;
//import com.openvas.commons.common.exception.file.InvalidExtensionException;
//import com.openvas.commons.common.utils.DateUtils;
//
//import com.openvas.commons.common.utils.StringUtils;
//import com.openvas.commons.common.utils.uuid.IdUtils;
//import org.apache.commons.io.FilenameUtils;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.*;
//import java.net.HttpURLConnection;
//import java.net.MalformedURLException;
//import java.net.URL;
//
///**
// * 文件上传工具类
// *
// * @author ruoyi
// */
//public class FileUploadUtils
//{
//    /**
//     * 默认大小 50M
//     */
//    public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024;
//
//    /**
//     * 默认的文件名最大长度 100
//     */
//    public static final int DEFAULT_FILE_NAME_LENGTH = 100;
//
//    /**
//     * 默认上传的地址
//     */
//    private static String defaultBaseDir = RuoYiConfig.getProfile();
//    private static String defaultImagePath = RuoYiConfig.getImagePath();
//
//    public static String getDefaultImagePath() {
//        return defaultImagePath;
//    }
//
//    public static void setDefaultImagePath(String defaultImagePath) {
//        FileUploadUtils.defaultImagePath = defaultImagePath;
//    }
//
//    public static void setDefaultBaseDir(String defaultBaseDir)
//    {
//        FileUploadUtils.defaultBaseDir = defaultBaseDir;
//    }
//
//    public static String getDefaultBaseDir()
//    {
//        return defaultBaseDir;
//    }
//
//    /**
//     * 以默认配置进行文件上传
//     *
//     * @param file 上传的文件
//     * @return 文件名称
//     * @throws Exception
//     */
//    public static final String upload(MultipartFile file) throws IOException
//    {
//        try
//        {
//            return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
//        }
//        catch (Exception e)
//        {
//            throw new IOException(e.getMessage(), e);
//        }
//    }
//
//    /**
//     * 下载网络图片
//     * urlImg 网络图片地址
//     * path 保存位置
//     * @return /profile/avatar/2021/10/20/cfd9e6dc-6c50-475b-8c2b-3153c838fdc4.jpg
//     */
//    public static final String downloadImg(String urlImg,String path){
//        URL url = null;
//        try {
//            url = new URL(urlImg);
//
//            DataInputStream dataInputStream = new DataInputStream(url.openStream());
//            //jpg
//            String extension = FileUploadUtils.getFileExtension(url);
//            //2021/10/20/cfd9e6dc-6c50-475b-8c2b-3153c838fdc4.jpg
//            String fileDateUtl = DateUtils.datePath();
//           // String fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension;
//            String fileFull =path + "/" + fileDateUtl;
//            //判断是否存在
//            isChartPathExist(fileFull);
//            String extensionFile = IdUtils.fastUUID() + "." + extension;
//            fileFull = fileFull + "/" + extensionFile;
//            System.out.println("路径："+fileFull);
//            FileOutputStream fileOutputStream = new FileOutputStream(new File(fileFull));
//            ByteArrayOutputStream output = new ByteArrayOutputStream();
//
//            byte[] buffer = new byte[1024];
//            int length;
//
//            while ((length = dataInputStream.read(buffer)) > 0) {
//                output.write(buffer, 0, length);
//            }
//            fileOutputStream.write(output.toByteArray());
//            dataInputStream.close();
//            fileOutputStream.close();
//
//            String uploadDir = RuoYiConfig.getAvatarPath();
//            int dirLastIndex = RuoYiConfig.getProfile().length() + 1;
//            String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
//            String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileDateUtl + "/" + extensionFile;
//            return  pathFileName;
//        } catch (MalformedURLException e) {
//            e.printStackTrace();
//            return null;
//        } catch (IOException e) {
//            e.printStackTrace();
//            return null;
//        }
//    }
//
//    /**
//     * 传URL获取文件后缀
//     * @param extUrl
//     * @return
//     * @throws MalformedURLException
//     */
//    public static String getFileExtension(URL extUrl) throws MalformedURLException {
//        //URL: "http://photosaaaaa.net/photos-ak-snc1/v315/224/13/659629384/s659629384_752969_4472.jpg"
//        // String filename = "";
//        //PATH: /photos-ak-snc1/v315/224/13/659629384/s659629384_752969_4472.jpg
//       // URL url = null;
//
//        //url = new URL(extUrl);
//        String extension="";
//        String path = extUrl.getPath();
//        String[] pathContents = path.split("[\\\\/]");
//        if(pathContents != null){
//            int pathContentsLength = pathContents.length;
//            //System.out.println("Path Contents Length: " + pathContentsLength);
////            for (int i = 0; i < pathContents.length; i++) {
////                System.out.println("Path " + i + ": " + pathContents[i]);
////            }
//            //lastPart: s659629384_752969_4472.jpg
//            String lastPart = pathContents[pathContentsLength-1];
//            String[] lastPartContents = lastPart.split("\\.");
//            if(lastPartContents != null && lastPartContents.length > 1){
//                int lastPartContentLength = lastPartContents.length;
//                String name = "";
//                for (int i = 0; i < lastPartContentLength; i++) {
//                    if(i < (lastPartContents.length -1)){
//                        name += lastPartContents[i] ;
//                        if(i < (lastPartContentLength -2)){
//                            name += ".";
//                        }
//                    }
//                }
//                extension = lastPartContents[lastPartContentLength -1];
//                // filename = name + "." +extension;
//                // System.out.println("Name: " + name);
//                // System.out.println("Extension: " + extension);
//                // System.out.println("Filename: " + filename);
//            }
//        }
//        return extension;
//    }
//
//    /**
//     * 获取链接的后缀名
//     * @return
//     */
//    public static String parseSuffix(String strUrl) {
//        BufferedInputStream bis = null;
//        HttpURLConnection urlConnection = null;
//        URL url = null;
//
//        try {
//            url = new URL(strUrl);
//            urlConnection = (HttpURLConnection) url.openConnection();
//            urlConnection.connect();
//
//            bis = new BufferedInputStream(urlConnection.getInputStream());
//
//            return HttpURLConnection.guessContentTypeFromStream(bis);
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 判断路径是否存在
//     * @param dirPath
//     */
//    private static void isChartPathExist(String dirPath) {
//        File file = new File(dirPath);
//        if (!file.exists() && !file .isDirectory()) {
//            file.mkdirs();
//        }
//    }
//    /**
//     * 根据文件路径上传
//     *
//     * @param baseDir 相对应用的基目录
//     * @param file 上传的文件
//     * @return 文件名称
//     * @throws IOException
//     */
//    public static final String upload(String baseDir, MultipartFile file) throws IOException
//    {
//        try
//        {
//            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
//        }
//        catch (Exception e)
//        {
//            throw new IOException(e.getMessage(), e);
//        }
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param baseDir 相对应用的基目录
//     * @param file 上传的文件
//     * @param allowedExtension 上传文件类型
//     * @return 返回上传成功的文件名
//     * @throws FileSizeLimitExceededException 如果超出最大大小
//     * @throws FileNameLengthLimitExceededException 文件名太长
//     * @throws IOException 比如读写文件出错时
//     * @throws InvalidExtensionException 文件校验异常
//     */
//    public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
//            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
//            InvalidExtensionException
//    {
//        int fileNamelength = file.getOriginalFilename().length();
//        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
//        {
//            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
//        }
//
//        assertAllowed(file, allowedExtension);
//
//        String fileName = extractFilename(file);
//
//        File desc = getAbsoluteFile(baseDir, fileName);
//        file.transferTo(desc);
//        String pathFileName = getPathFileName(baseDir, fileName);
//        return pathFileName;
//    }
//
//    /**
//     * 编码文件名
//     */
//    public static final String extractFilename(MultipartFile file)
//    {
//        String fileName = file.getOriginalFilename();
//        String extension = getExtension(file);
//        fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension;
//        return fileName;
//    }
//
//    public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException
//    {
//        File desc = new File(uploadDir + File.separator + fileName);
//
//        if (!desc.exists())
//        {
//            if (!desc.getParentFile().exists())
//            {
//                desc.getParentFile().mkdirs();
//            }
//        }
//        return desc;
//    }
//
//    /**
//     * 生成新的路径和文件名
//     * @param uploadDir
//     * @param fileName
//     * @return
//     * @throws IOException
//     */
//    public static final String getPathFileName(String uploadDir, String fileName) throws IOException
//    {
//        int dirLastIndex = RuoYiConfig.getProfile().length() + 1;
//        String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
//        String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
//        return pathFileName;
//    }
//
//    /**
//     * 文件大小校验
//     *
//     * @param file 上传的文件
//     * @return
//     * @throws FileSizeLimitExceededException 如果超出最大大小
//     * @throws InvalidExtensionException
//     */
//    public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
//            throws FileSizeLimitExceededException, InvalidExtensionException
//    {
//        long size = file.getSize();
//        if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE)
//        {
//            throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
//        }
//
//        String fileName = file.getOriginalFilename();
//        String extension = getExtension(file);
//        if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension))
//        {
//            if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION)
//            {
//                throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
//                        fileName);
//            }
//            else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION)
//            {
//                throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
//                        fileName);
//            }
//            else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION)
//            {
//                throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
//                        fileName);
//            }
//            else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION)
//            {
//                throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
//                        fileName);
//            }
//            else
//            {
//                throw new InvalidExtensionException(allowedExtension, extension, fileName);
//            }
//        }
//
//    }
//
//    /**
//     * 判断MIME类型是否是允许的MIME类型
//     *
//     * @param extension
//     * @param allowedExtension
//     * @return
//     */
//    public static final boolean isAllowedExtension(String extension, String[] allowedExtension)
//    {
//        for (String str : allowedExtension)
//        {
//            if (str.equalsIgnoreCase(extension))
//            {
//                return true;
//            }
//        }
//        return false;
//    }
//
//    /**
//     * 获取文件名的后缀
//     *
//     * @param file 表单文件
//     * @return 后缀名
//     */
//    public static final String getExtension(MultipartFile file)
//    {
//        String extension = FilenameUtils.getExtension(file.getOriginalFilename());
//        if (StringUtils.isEmpty(extension))
//        {
//            extension = MimeTypeUtils.getExtension(file.getContentType());
//        }
//        return extension;
//    }
//}
